package com.yuw.net.tcpdemo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerThread extends Thread {

	// 属性

	// 行为

	@Override
	public void run() {
		// 创建一个服务器端的socket对象
		// 要求：服务器和客户端端口保持一致即可
		try {
			ServerSocket socketS = new ServerSocket(9011);
			while (true) {
				// 创建一个响应客户端的socket对象
				Socket socket = socketS.accept();

				/////////////// 服务端接收消息 开始/////////////////////
				// 获取输入流对象
				BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));

				// 读取服务器发送的消息
				String strServerMsg = br.readLine();
				while (strServerMsg != null && !strServerMsg.equalsIgnoreCase("eof")) {
					System.out.println("服务器接收消息：" + strServerMsg);
					// 继续读取后续内容直到结束位置
					strServerMsg = br.readLine();
				}
				/////////////// 服务端接收消息 结束/////////////////////

				/////////////// 服务器发送消息 开始/////////////////////
				// 发送消息使用 ouputstream输出流
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
				String strClientMsg = "hello,client,this is server...";
				// 向服务器写出内容
				bw.write(strClientMsg);
				// 写一个行结束符
				bw.newLine();
				// 还可以发送其他消息
				// bw.write("1231231312312 \n");
				// 客户端可以输入多行内容
				// 通信结束的标识：客户端发送 "eof" 表示内发送结束
				bw.write("eof");
				bw.write("\n");
				// 清空
				bw.flush();
				System.out.println("服务端发送消息：" + strClientMsg);

				/////////////// 服务端发送消息 结束/////////////////////
				
				// 关闭资源
				socket.close();
			}

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
